
main(){
    // 函数的基本格式
    // 返回值类型 函数名称 (参数1,参数2,...){
    //   函数体
    //   return 返回值
    // }
  //   List myfun (a,b){
  //     return [a,b];
  //   }
  //  print(myfun(1,2));//在main定义的函数必须在main入口函数内调用

  // Function myfn (){ //函数里返回函数
  //   sets(){
  //     print(111);
  //   };
  //   return sets;
  // }
  // var fn = myfn();
  // fn();

  // fnn(int num,int i){ //设置参数的类型
  //   var sum = 0;
  //   while (i<=num) {
  //     sum+=i;
  //     i++;
  //   }
  //   return sum;
  // }
  // var a = fnn(10,0);
  // print(a);

  // fn(int a,[int b=1]){ //可选参数---要用中括号包着，且可选参数要放在最后面，可以给可算参数设置默认值
  //   print('$a,$b');
  // }
  // fn(1,2);

  // 定义一个命名参数函数
  // fn(int a,{String b='',int c= 1}){ //形象与实参的名字要一直,注意如果设置了命名参数，那该参数必须要设置默认值

  // }
  // fn(8,b:'10',c:8);

  // fn()=>{ //箭头函数内多行代码用逗号隔开
  //   print(1),
  //   print(1)
  // };
  // fn();

  // List arr = [1,2,3,3];
  // var newArr = arr.map((e) => e>2?e*2:e);//箭头函数不能写return；
  // print(newArr.toList());

  // Map isEven(int n){  //函数内执行函数
  //   if(n%2==0){
  //     return {'n':n,'flag':'偶数'};
  //   }
  //   return {'n':n,'flag':'奇数'};
  // }
  // List arr = [];
  // handlerEven(int a){
  //   int n = 1;
  //   while (n<=a) {
  //     arr.add(isEven(n));
  //     n++;
  //   }
  // }
  // handlerEven(8);
  // print(arr);

  // 匿名函数
  // var fn = ()=>{
  //   print('这是匿名函数')
  // };
  // fn();

  // 自执行函数也称为立即执行函数
  // ((){
  //   print('自执行函数');
  // }());
  // // 或者
  // ((){
  //   print('自执行函数');
  // })();

  // 递归函数
//  int sum = 1;
//  fn(int n){
//     sum*=n;
//     if(n==1){
//       return sum;  //return返回值的注意点：如果多处使用了return，只要有一个有返回值全部都得要带上返回值
//     }
//     fn(n-1);
//     return sum;
//   }
//   print(fn(3));
}